<?php

 class Comunas
 {
     protected static $instancia = null;

     protected static $id;
     protected static $tabla = __class__;
     protected static $pk;
     protected static $debug;

     protected $data;

     protected function __construct()
     {
         //print_r($this->data);
     }

     static public function getInstancia($id, $debug = false)
     {
         if (isset($id))
         {
             if (!self::$instancia instanceof self)
             {
                 self::$instancia = new self;
                 self::$id = $id;
                 self::$tabla = strtolower(self::$tabla);
                 self::$debug = $debug;
                 if (!self::$instancia->init(self::$id, self::$debug))
                 {
                     return false;
                     exit;
                 }
             }
             if (!self::$instancia->init($id, self::$debug))
             {
                 return false;
                 exit;
             } else
             {
                 return self::$instancia;
             }

         } else
         {
             return false;
         }


     }

     protected function init($id, $debug)
     {
         if (isset($id, $debug))
         {
             $db = Zen::Db($debug); //instanciar la DB
             $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
             $pks = $db->MetaPrimaryKeys(self::$tabla);
             self::$pk = $pks[0];
             $sql = "SELECT * FROM " . self::$tabla . " WHERE " . self::$pk . "='$id'";
             $pre = $db->Prepare($sql);
             if (!$pre)
             {
                 return false;
                 //exit;
             } 
             else
             {
                 $rs = $db->GetAll($pre);
                 if (!$rs)
                 {
                     return false;
                     //exit;
                 } else
                 {
                     $this->data = $rs;
                     return true;
                 }
             }


             //return true;
         } else
         {
             return false;
         }

     }
     public function Datos()
     {
         return $this->data[0];

     }

     public function __get($property)
     {

         if (isset($this->data[0][$property]))
         {

             return Zen::Capitalizar($this->data[0][$property]);

         } else
         {

             //return false;
             //return '<strong>No existe el atributo ' . $property . '</strong>';
             return '';

         }

     }

     public function __set($property, $value)
     {
         //$db = Zen::Db($debug); //instanciar la DB
         $reg = array();
         $reg[$property] = $value;
         $ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
         $res = Zen::AutoSql(self::$debug, self::$tabla, $reg, 'UPDATE', self::$pk . "='" .
             self::$id . "'", false, false);
         if ($res)
         {
             self::init(self::$id, self::$debug);
             return true;
         } else
         {
             return false;
         }
     }

     public function __toString()
     {

         return 'No se permite.';

     }
     public function __clone()
     {
         trigger_error("Operación Invalida: No puedes clonar una instancia de " .
             get_class($this) . " class.", E_USER_ERROR);
     }
     public function __wakeup()
     {
         trigger_error("No puedes deserializar una instancia de " . get_class($this) .
             " class.");
     }

 }

?>